<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 继承是面向对象编程的另一个特征，通过继承进一步提升代码封装的程度，
    // JavaScript 中大多是借助原型对象实现继承的特性

    // 继续抽取  公共的部分放到原型上
    // const Person1 = {
    //   eyes: 2,
    //   head: 1
    // }
    // const Person2 = {
    //   eyes: 2,
    //   head: 1
    // }
    // 构造函数  new出来的对象 结构一样，但是 对象不一样  翻构造函数的27，28行
    function Person() {
      this.eyes = 2
      this.head = 1
    }

    // 女人 构造函数  继承  想要继承Person
    function Woman() { }
    // Women通过原型来继承Person
    // 父构造函数（父类）  子构造函数（子类）
    // 子类的原型 = new 父类
    Woman.prototype = new Person()  // {eays: 2, head: 1}
    // 指回原来的构造函数
    Woman.prototype.constructor = Woman
    // 给女人添加一个方法  生孩子
    Woman.prototype.baby = function () {
      console.log('宝贝')
    }
    const mjq = new Woman()
    console.log(mjq)
    // console.log(mjq.__proto__)  // {eays: 2, head: 1}
    // console.log(mjq.eyes)  // 2
    // console.log(Woman.prototype.constructor)  // ƒ Woman() { }


    // 男人 构造函数  继承  想要继承Person
    function Man() { }
    // Man通过原型来继承Person
    Man.prototype = new Person()
    // 指回原来的构造函数
    Man.prototype.constructor = Man
    const cxk = new Man()
    console.log(cxk)
    // console.log(cxk.__proto__)
    // console.log(cxk.eyes)  // 2
    // console.log(Man.prototype.constructor)  // ƒ Man() { }
  </script>
</body>

</html>